Just my learning go snippets
package tictactoe

// Evaluate evaluates the Board for the Minimax algorithm.
func (b Board) Evaluate() int {
	for row := range b {
		for col := range b[row] {
			// Skip empty!
			// Skip when remaining length < winsize, so no way to win
			if b.checkRow(row, col, WinSize, P_1) == WinSize {
				return +10
			} else if b.checkRow(row, col, WinSize, P_2) == WinSize {
				return -10
			}
			if b.checkCol(row, col, WinSize, P_1) == WinSize {
				return +10
			} else if b.checkCol(row, col, WinSize, P_2) == WinSize {
				return -10
			}
			if b.checkDiagLR(row, col, WinSize, P_1) == WinSize {
				return +10
			} else if b.checkDiagLR(row, col, WinSize, P_2) == WinSize {
				return -10
			}
			if b.checkDiagRL(row, col, WinSize, P_1) == WinSize {
				return +10
			} else if b.checkDiagRL(row, col, WinSize, P_2) == WinSize {
				return -10
			}
		}
	}
	return 0
}

func (b Board) checkRow(row, col, winsize int, player rune) (goodness int) {
	for i := 0; i < winsize; i++ {
		if row+i < len(b[col]) {
			if b[row+i][col] == player {
				goodness++
			} else {
				return goodness
			}
		}
	}
	return goodness
}

func (b Board) checkCol(row, col, winsize int, player rune) (goodness int) {
	for j := 0; j < winsize; j++ {
		if col+j < len(b[row]) {
			if b[row][col+j] == player {
				goodness++
			} else {
				return goodness
			}
		}
	}
	return goodness
}

func (b Board) checkDiagLR(row, col, winsize int, player rune) (goodness int) {
	for k := 0; k < winsize; k++ {
		if row+k < len(b[col]) && col+k < len(b[row]) {
			if b[row+k][col+k] == player {
				goodness++
			} else {
				return goodness
			}
		}
	}
	return goodness
}

func (b Board) checkDiagRL(row, col, winsize int, player rune) (goodness int) {
	for k := 0; k < winsize; k++ {
		if row+k < len(b[col]) && col-k >= 0 {
			if b[row+k][col-k] == player {
				goodness++
			} else {
				return goodness
			}
		}
	}
	return goodness
}