Golang 二維切片代碼示例
如下代碼將生成一個(gè)二維切片,并選擇一種圖像解析式。以下是幾種不同解析式的實(shí)現(xiàn):
package main
import (
"math"
)
// 選擇你喜歡的解析式,取消注釋對(duì)應(yīng)的行
func Pic(dx, dy int) [][]uint8 {
// 創(chuàng)建外層切片,長(zhǎng)度為dy
pic := make([][]uint8, dy)
for y := 0; y < dy; y++ {
// 創(chuàng)建內(nèi)層切片,長(zhǎng)度為dx
row := make([]uint8, dx)
for x := 0; x < dx; x++ {
// 選擇不同的解析式計(jì)算像素值
// 注意:uint8范圍是0-255,需要確保計(jì)算結(jié)果在這個(gè)范圍內(nèi)
// 解析式1: (x+y)/2
// value := (x + y) / 2
// 解析式2: x*y
// value := x * y
// 解析式3: x^y (異或)
// value := x ^ y
// 解析式4: x*log(y+1) (避免log(0))
// value := int(float64(x) * math.Log(float64(y+1)))
// 解析式5: x%(y+1) (避免除零)
value := x % (y + 1)
// 確保值在0-255范圍內(nèi)
if value > 255 {
value = 255
}
row[x] = uint8(value)
}
pic[y] = row
}
return pic
}更完整的示例,包含測(cè)試代碼:
package main
import (
"math"
"golang.org/x/tour/pic"
)
func Pic(dx, dy int) [][]uint8 {
// 創(chuàng)建二維切片
result := make([][]uint8, dy)
for y := range result {
result[y] = make([]uint8, dx)
for x := range result[y] {
// 這里使用 x*y 作為示例,你可以替換為其他解析式
value := x * y
// 或者使用其他解析式:
// value := (x + y) / 2
// value := x ^ y
// value := int(float64(x) * math.Log(float64(y+1)))
// value := x % (y + 1)
// 確保值在uint8范圍內(nèi)
if value > 255 {
value = 255
}
result[y][x] = uint8(value)
}
}
return result
}
func main() {
pic.Show(Pic)
}如果你想要嘗試不同的解析式,這里有幾個(gè)預(yù)定義的版本:
package main
import (
"math"
"golang.org/x/tour/pic"
)
// 使用 (x+y)/2 解析式
func Pic1(dx, dy int) [][]uint8 {
pic := make([][]uint8, dy)
for y := range pic {
pic[y] = make([]uint8, dx)
for x := range pic[y] {
pic[y][x] = uint8((x + y) / 2)
}
}
return pic
}
// 使用 x*y 解析式
func Pic2(dx, dy int) [][]uint8 {
pic := make([][]uint8, dy)
for y := range pic {
pic[y] = make([]uint8, dx)
for x := range pic[y] {
value := x * y
if value > 255 {
value = 255
}
pic[y][x] = uint8(value)
}
}
return pic
}
// 使用 x^y (異或) 解析式
func Pic3(dx, dy int) [][]uint8 {
pic := make([][]uint8, dy)
for y := range pic {
pic[y] = make([]uint8, dx)
for x := range pic[y] {
pic[y][x] = uint8(x ^ y)
}
}
return pic
}
// 使用 x*log(y+1) 解析式
func Pic4(dx, dy int) [][]uint8 {
pic := make([][]uint8, dy)
for y := range pic {
pic[y] = make([]uint8, dx)
for x := range pic[y] {
value := int(float64(x) * math.Log(float64(y+1)))
if value > 255 {
value = 255
} else if value < 0 {
value = 0
}
pic[y][x] = uint8(value)
}
}
return pic
}
func main() {
// 選擇你想要的解析式
pic.Show(Pic1) // (x+y)/2
// pic.Show(Pic2) // x*y
// pic.Show(Pic3) // x^y
// pic.Show(Pic4) // x*log(y+1)
}運(yùn)行說(shuō)明:
- 你需要安裝 Go Tour 包:
go get golang.org/x/tour/pic - 選擇一個(gè)解析式并取消注釋對(duì)應(yīng)的代碼
- 運(yùn)行程序:
go run main.go
每種解析式都會(huì)產(chǎn)生不同的圖像模式:
(x+y)/2:產(chǎn)生對(duì)角線漸變x*y:產(chǎn)生類似同心圓的圖案x^y:產(chǎn)生分形般的復(fù)雜圖案x*log(y+1):產(chǎn)生垂直方向的漸變x%(y+1):產(chǎn)生類似模運(yùn)算的重復(fù)圖案
到此這篇關(guān)于Golang 二維切片代碼示例的文章就介紹到這了,更多相關(guān)Golang 二維切片內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Go語(yǔ)言開(kāi)發(fā)自動(dòng)化API測(cè)試工具詳解
這篇文章主要為大家詳細(xì)介紹了如何使用Go語(yǔ)言開(kāi)發(fā)自動(dòng)化API測(cè)試工具,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考下2024-03-03
Go語(yǔ)言學(xué)習(xí)之運(yùn)算符使用詳解
這篇文章主要介紹了Go語(yǔ)言中常用運(yùn)算符的使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04
四種Golang實(shí)現(xiàn)middleware框架的方式小結(jié)
middleware是一般框架里面常用的形式,比如web框架、rpc框架等,本文為大家詳細(xì)介紹了四種實(shí)現(xiàn)middleawre的方式,感興趣的可以了解一下2024-03-03
Go語(yǔ)言題解LeetCode561數(shù)組拆分
這篇文章主要為大家介紹了Go語(yǔ)言題解LeetCode561數(shù)組拆分示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
golang使用redis實(shí)現(xiàn)全文搜索功能詳解
這篇文章主要為大家詳細(xì)介紹了golang如何使用redis實(shí)現(xiàn)全文搜索功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-02-02
GO語(yǔ)言判斷一個(gè)網(wǎng)段是否屬于另一個(gè)網(wǎng)段的子網(wǎng)
這篇文章主要介紹了GO語(yǔ)言判斷一個(gè)網(wǎng)段是否屬于另一個(gè)網(wǎng)段的子網(wǎng)的相關(guān)資料,內(nèi)容介紹詳細(xì),具有一定的參考價(jià)值,需要的朋友可任意參考一下2022-03-03

