做食品網(wǎng)站需要什么條件品牌廣告策劃方案
1.? go語言的數(shù)據(jù)類型簡介
golang的數(shù)據(jù)類型分為兩大類,一類是基本數(shù)據(jù)類型和符合數(shù)據(jù)類型;
按照傳遞的內(nèi)容分:傳遞本身數(shù)據(jù)和傳遞地址;
golang和java很相似,都是值傳遞,不過分為傳遞的值和傳遞的地址,傳遞地址的叫做引用傳遞;
2.基本數(shù)據(jù)類型
基本數(shù)據(jù)類型有:整數(shù)、浮點(diǎn)數(shù)、布爾型、字符
2.1 整數(shù)類型
(1)介紹
類型 | 范圍 | 占用空間 | 有無符號 |
int8 | -2^7到2^7-1 | 1個字節(jié) | 有 |
int16 | -2^15到2^15-1 | 2個字節(jié) | 有 |
int32 | -2^31到2^31-1 | 4個字節(jié) | 有 |
int64 | -2^63到2^63-1 | 8個字節(jié) | 有 |
uint8 | 0到2^8-1 | 1個字節(jié) | 無 |
uint16 | 0到2^16-1 | 2個字節(jié) | 無 |
uint32 | 0到2^32-1 | 4個字節(jié) | 無 |
uint64 | 0到2^64-1 | 8個字節(jié) | 無 |
????????注意: 在使用 int 和 uint 類型時,不能假定它是 32 位或 64 位的整型,而是考慮 int 和 uint可能在不同平臺上的差異。
????????注意事項(xiàng): 實(shí)際項(xiàng)目中整數(shù)類型、切片、 map 的元素?cái)?shù)量等都可以用 int 來表示。
????????在涉及 到二進(jìn)制傳輸、為了保持文件的結(jié)構(gòu)不會受到不同編譯目標(biāo)平臺字節(jié)長度的影響,不要使 用 int 和 uint 。
(2)整數(shù)常見的進(jìn)制以及占位符表示
package mainimport "fmt"func main() {//二進(jìn)制a := 0b1001fmt.Printf("%d \n", a)fmt.Printf("%b \n", a)//十進(jìn)制b := 0377fmt.Printf("%o \n", b)//十六進(jìn)制c := 0xfffmt.Printf("%d \n", c)// 顯示數(shù)據(jù)的數(shù)據(jù)類型fmt.Printf("%T \n",c)
}
2.2 浮點(diǎn)數(shù)
類型 | 存儲空間 | 范圍 |
float32 | 4字節(jié) | -3.403e38~3.403e38 |
float64 | 8字節(jié) | -1.798e308~1.798e308 |
import ("fmt""unsafe"
)func main() {var float1 float32 = 1.23fmt.Printf("%f \n", float1) //默認(rèn)保留6位小數(shù)fmt.Printf("%.2f \n", float1)//float32 占用4位,并且類型位float32var a float32 = 3.14fmt.Printf("值為%v--%f,類型%T\n", a, a, a)fmt.Println(unsafe.Sizeof(a)) //占4個字節(jié)//float64 占用8位,并且類型位float64var b float64 = 1.23fmt.Printf("值為%v--%f,類型%T\n", b, b, b)fmt.Println(unsafe.Sizeof(b))}
Golang 中 float 精度丟失問題
????????幾乎所有的編程語言都有精度丟失這個問題,這是典型的二進(jìn)制浮點(diǎn)數(shù)精度損失問題,在定
長條件下,二進(jìn)制小數(shù)和十進(jìn)制小數(shù)互轉(zhuǎn)可能有精度丟失。這個問題在銀行系統(tǒng)中特別致命。
如何解決:在java中有一個叫做bigdecimal的類可以解決這個問題,在golang中也有一個decimal可以解決這個問題
package mainimport ("fmt""github.com/shopspring/decimal"
)func main() {decimal1, err := decimal.NewFromString("1129.6")decimal2, err := decimal.NewFromString("100")result := decimal1.Mul(decimal2)if err != nil {fmt.Println("轉(zhuǎn)化失敗:", err)}fmt.Println(result)
}
2.3 布爾類型
var fl = false
if f1 {fmt.Println("true")
} else {fmt.Println("false")
}
2.4 字符串類型
Go語言里的字符串的內(nèi)部實(shí)現(xiàn)使用UTF-8編碼。字符串的值為雙引號(")中的內(nèi)容
字符串處理的基本方法
package mainimport ("fmt""strings"
)func main() {var str string = "hello,world"//len求字符串的長度fmt.Println(len(str))//fmt.sprintf拼接字符串fmt.Println(fmt.Sprintf("我真的%s", "帥"))//字符串中是否包含fmt.Println(strings.Contains(str, "hello"))//以,分割字符串fmt.Println(strings.Split(str, ","))arr := []string{"hello", "world"}//拼接字符串,sep什么為間隔fmt.Println(strings.Join(arr, ","))//是否有后綴fmt.Println(strings.HasSuffix(str, "world"))//是否有前綴fmt.Println(strings.HasPrefix(str, "hello"))//子字符串最開始出現(xiàn)的位置fmt.Println(strings.Index(str, "ell"))//子字符串最后開始出現(xiàn)的位置fmt.Println(strings.LastIndex(str, "l"))
}
2.5字符
組成每個字符串的元素叫做 “字符”,可以通過遍歷字符串元素獲得字符。字符用單引號 ‘’ 包裹起來
Go語言中的字符有以下兩種類型
uint8類型:或者叫byte型,代表了ACII碼的一個字符
rune類型:代表一個UTF-8字符
當(dāng)需要處理中文,日文或者其他復(fù)合字符時,則需要用到rune類型,rune類型實(shí)際上是一個int32
Go使用了特殊的rune類型來處理Unicode,讓基于Unicode的文本處理更為方便,也可以使用byte型進(jìn)行默認(rèn)字符串處理,性能和擴(kuò)展性都有照顧。
需要注意的是,在go語言中,一個漢字占用3個字節(jié)(utf-8),一個字母占用1個字節(jié)
package mainimport "fmt"func main() {var a byte = 'a'fmt.Println(a)fmt.Printf("%c \n", a)s := "你好,golang"//使用len 循環(huán)相當(dāng)于打印的是ascii碼for i := 0; i < len(s); i++ {fmt.Printf("%v(%c)\t", s[i], s[i])}//通過rune打印的是 utf-8字符for i, i2 := range s {fmt.Println(i, i2)}s1 := "golang"byte1 := []byte(s1)byte1[0] = 'o'fmt.Println(string(byte1))s2 := "你好,世界"byte2 := []rune(s2)byte2[0] = '不'fmt.Println(string(byte2))
}
3.基本數(shù)據(jù)類型的轉(zhuǎn)化
3.1數(shù)值類型的轉(zhuǎn)化
package mainimport "fmt"func main() {var a int16 = 8var b int64 = 16fmt.Println(int64(a) + b)var c int8 = 12var d float32 = 32fmt.Println(float32(c) + d)
}
3.2 轉(zhuǎn)化成字符串
import ("fmt""strconv"
)func main() {//通過sprint轉(zhuǎn)化成字符串s1 := fmt.Sprintf("%d", 1)fmt.Println(s1)//痛毆strconv轉(zhuǎn)化var num float64 = 3.14fmt.Println(strconv.FormatFloat(num, 'f', -1, 64))
}
3.3 字符串轉(zhuǎn)化成int和float類型
import ("fmt""strconv"
)func main() {str := "10"str2 := "3.14"fmt.Println(strconv.ParseInt(str, 10, 64))fmt.Println(strconv.ParseFloat(str2, 64))}