熟悉C語言的同學(xué)都知道,查看一個變量的地址在處理指針的相關(guān)問題的時候直觀重要,在C中直接取地址符 即可。那么在Go語言中如何查看一個變量的地址,我們使用unsafe.Pointer() 函數(shù)來查看一個變量的內(nèi)存地址。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序定制開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了灤州免費(fèi)建站歡迎大家使用!
舉例:
type Vertex struct {
X, Y float64
}
func (v Vertex) sqrt() float64 {
return math.Sqrt(v.X * v.X + v.Y * v.Y)
}
func (v Vertex) scale(f float64) { //帶 號 和不帶*號的區(qū)別 可以從內(nèi)存地址來看出
fmt.printf("=======", unsafe.Pointer(v))//v 本身就是指針 存儲的就是地址 不用取地址
v.X = x.X * f
v.Y = v.Y * f
}
func main() {
v := Vertex{3, 4}
fmt.printf("=======", unsafe.Pointer(v))
v.scale(10)
fmt.Println(v.sqrt())
}
//帶 號 打印的結(jié)果 ====== -%!(EXTRA unsafe.Pointer=0xc00006e070)======%!(EXTRA unsafe.Pointer=0xc00006e070) 相同
//不帶 號 打印的結(jié)果 ======%!(EXTRA unsafe.Pointer=0xc000094060)======%!(EXTRA unsafe.Pointer=0xc000094090) 不同
去掉*號 在scale()方法中要對 v 進(jìn)行取地址操作
1、基本數(shù)據(jù)類型
bool
string
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
byte // alias for int8
rune // alias for int32,represents a Unicode code point
float32 float64
complex64 complex128
常量定義
2、類型轉(zhuǎn)換
(1)Go語言不允許隱式類型轉(zhuǎn)換(不支持小位數(shù)類型向大位數(shù)類型轉(zhuǎn))
(2)別名和原有類型也不能進(jìn)行隱式類型轉(zhuǎn)換(type MyInt int64 = int64)
3、類型的預(yù)定義值
1.math.MaxInt64
2.math.MaxFloat64
3.math.MaxUInt32
4、指針類型
(1)不支持指針運(yùn)算
(2)string是值類型,其默認(rèn)的初始化值為空字符串,而不是nil
5、算術(shù)運(yùn)算符
+ - * / % ++ --(不支持前置++ --)
6、比較運(yùn)算符
#== != = =
(1)比較數(shù)組
相同維數(shù)且含有形同個數(shù)元素的數(shù)組才可以比較
每個元素都相同的才相等
7、位運(yùn)算符
| ^
^ (按位置零) a (^b)
1 ^ 0 1
1 ^ 1 0
0 ^ 1 0
0 ^ 0 0
8、條件與循環(huán)
(1)循環(huán)
Go 語?僅?持循環(huán)關(guān)鍵字 for
(2)條件
9、數(shù)組和切片
數(shù)組截取,索引下標(biāo)從0開始計(jì)數(shù)
a[開始索引(包含), 結(jié)束索引(不包含)]
a := [...]int{1, 2, 3, 4, 5}
a[1:2] //2
a[1:3] //2,3
a[1:len(a)] //2,3,4,5
a[1:] //2,3,4,5
a[:3] //1,2,3
切片內(nèi)部結(jié)構(gòu)
9、Map
9、字符串
Unicode UTF8
常?字符串函數(shù)
math.Exp2(10)就是計(jì)算2的10次方。
下面是一個例子
package main
import "fmt"
import "math"
func main() {
fmt.Printf("%f\n",
math.Exp2(10))
fmt.Printf("%f\n",
math.Exp2(4))
}
go語言math包里面定義了min/max函數(shù),但是是float64類型的,而并沒有整數(shù)類型的min/max。
因?yàn)間o沒有重載,這是個大坑。所以math庫里min/max函數(shù)都只能定義一個,所以官方選擇了比較難實(shí)現(xiàn)的float64類型。而簡單的整形就需要讓程序員自己實(shí)現(xiàn)了